"""
为新增字段添加注释的迁移脚本
"""

import os
import sys
import logging
from datetime import datetime

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# 导入Flask应用
from app import create_app, db
from sqlalchemy import text

def add_field_comments():
    """为新增字段添加注释"""
    logger.info("开始为新增字段添加注释...")

    # 创建Flask应用
    app = create_app()

    # 在应用上下文中执行迁移
    with app.app_context():
        try:
            # 为schedule_results表的字段添加注释
            logger.info("为schedule_results表的字段添加注释...")
            
            # plan_date字段注释
            db.session.execute(text("""
                ALTER TABLE schedule_results 
                MODIFY COLUMN plan_date DATE COMMENT '排班计划日期，记录排班的目标日期'
            """))
            logger.info("成功为schedule_results表的plan_date字段添加注释")
            
            # batch_number字段注释
            db.session.execute(text("""
                ALTER TABLE schedule_results 
                MODIFY COLUMN batch_number INT COMMENT '批次号，用于标识同一批次生成的数据，便于后续查询'
            """))
            logger.info("成功为schedule_results表的batch_number字段添加注释")
            
            # create_time字段注释
            db.session.execute(text("""
                ALTER TABLE schedule_results 
                MODIFY COLUMN create_time DATETIME COMMENT '创建时间，记录数据的创建时间'
            """))
            logger.info("成功为schedule_results表的create_time字段添加注释")
            
            # update_time字段注释
            db.session.execute(text("""
                ALTER TABLE schedule_results 
                MODIFY COLUMN update_time DATETIME COMMENT '更新时间，记录数据的最后更新时间'
            """))
            logger.info("成功为schedule_results表的update_time字段添加注释")
            
            # status字段注释
            db.session.execute(text("""
                ALTER TABLE schedule_results 
                MODIFY COLUMN status VARCHAR(20) COMMENT '状态，记录数据的状态，如active（活动）、deleted（已删除）等'
            """))
            logger.info("成功为schedule_results表的status字段添加注释")
            
            # 为time_slots表的字段添加注释
            logger.info("为time_slots表的字段添加注释...")
            
            # plan_date字段注释
            db.session.execute(text("""
                ALTER TABLE time_slots 
                MODIFY COLUMN plan_date DATE COMMENT '排班计划日期，记录排班的目标日期，与schedule_results表中的plan_date保持一致'
            """))
            logger.info("成功为time_slots表的plan_date字段添加注释")
            
            # batch_number字段注释
            db.session.execute(text("""
                ALTER TABLE time_slots 
                MODIFY COLUMN batch_number INT COMMENT '批次号，用于标识同一批次生成的数据，与schedule_results表中的batch_number保持一致'
            """))
            logger.info("成功为time_slots表的batch_number字段添加注释")
            
            # create_time字段注释
            db.session.execute(text("""
                ALTER TABLE time_slots 
                MODIFY COLUMN create_time DATETIME COMMENT '创建时间，记录数据的创建时间'
            """))
            logger.info("成功为time_slots表的create_time字段添加注释")
            
            # update_time字段注释
            db.session.execute(text("""
                ALTER TABLE time_slots 
                MODIFY COLUMN update_time DATETIME COMMENT '更新时间，记录数据的最后更新时间'
            """))
            logger.info("成功为time_slots表的update_time字段添加注释")
            
            # status字段注释
            db.session.execute(text("""
                ALTER TABLE time_slots 
                MODIFY COLUMN status VARCHAR(20) COMMENT '状态，记录数据的状态，如active（活动）、deleted（已删除）等'
            """))
            logger.info("成功为time_slots表的status字段添加注释")
            
            # 提交事务
            db.session.commit()
            logger.info("成功为所有新增字段添加注释")
            
            return True
        except Exception as e:
            db.session.rollback()
            logger.error(f"为新增字段添加注释时出错: {str(e)}")
            return False

if __name__ == "__main__":
    success = add_field_comments()
    if success:
        print("成功为新增字段添加注释")
    else:
        print("为新增字段添加注释失败，请查看日志")
